home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / c / cl_7_bug.zip / BUG_2.C < prev    next >
C/C++ Source or Header  |  1992-10-10  |  2KB  |  79 lines

  1. /* Test if switch: Some switch-options are optimized to void */
  2.  
  3. #include <stdio.h>
  4. #include <string.h>
  5.  
  6. struct state {
  7.     int flags;                /* Current state flags */
  8. };
  9.  
  10. static struct state stack;    /* Linked list of stacked states */
  11.  
  12. #define TRACE_ON          000001  /* Trace enabled */
  13. #define DEBUG_ON          000002  /* Debug enabled */
  14. #define FILE_ON              000004  /* File name print enabled */
  15. #define LINE_ON              000010  /* Line number print enabled */
  16. #define DEPTH_ON          000020  /* Function nest level print enabled */
  17. #define PROCESS_ON          000040  /* Process name print enabled */
  18. #define NUMBER_ON          000100  /* Number each line of output */
  19. #define SANITY_CHECK_ON          000200  /* Check safemalloc on DBUG_ENTER */
  20. #define FLUSH_ON_WRITE          000400  /* Flush on every write */
  21.  
  22. void _db_push_ (char *control);
  23.  
  24. int main(int argc,char *argv[])
  25. {
  26.   _db_push_ ("#t");
  27.   if (stack.flags & TRACE_ON)
  28.     puts("The program works");
  29.   else
  30.     puts("Error: -t switch dosen't work");
  31.   return 0;
  32. }
  33.  
  34.  
  35. void _db_push_ (control)
  36. char *control;
  37. {
  38.   register char *scan;
  39.   char *new_str;
  40.  
  41.     for (scan=control; scan != NULL; scan = strchr(scan,':'))
  42.     {
  43.           switch (*(++scan)) {
  44.           case 'd':
  45.           case 'D':
  46.                   stack.flags |= DEBUG_ON;
  47.                   break;
  48.           case 'f':
  49.           case 'F':
  50.                   stack.flags |= FILE_ON;
  51.                   break;
  52.           case 'L':
  53.                   stack.flags |= LINE_ON;
  54.                   break;
  55.           case 'n':
  56.                   stack.flags |= DEPTH_ON;
  57.                   break;
  58.           case 'N':
  59.                   stack.flags |= NUMBER_ON;
  60.                   break;
  61.           case 'O':
  62.           case 'o':
  63.                   stack.flags |= FLUSH_ON_WRITE;
  64.                   break;
  65.           case 'p':
  66.           case 'P':
  67.           case 'r':
  68.                   stack.flags |= PROCESS_ON;
  69.                   break;
  70.           case 't':
  71.                   stack.flags |= TRACE_ON;
  72.                   break;
  73.           case 'S':
  74.                   stack.flags |= SANITY_CHECK_ON;
  75.                   break;
  76.           }
  77.     }
  78. }
  79.